package cn.pugle.base.classloader;

/**
 * 测试解析阶段会不会导致load别的类
 *
 * @author tzp
 * @since 2020/11/17
 */
public class ResolveOrderTest {
    public static void main(String[] args) {
        System.out.println("hh");//执行完这一行582个Class, AClass的静态代码块未执行
        //但是通过debeg/memory查看Class的示例, this.getSimpleName().equals("AClass"), 已经有AClass的实例了
        AClass.sm(null);//执行完这一行还是582个Class, AClass静态执行, 被初始化
        new AClass().refB0();//执行完这一行还是582个Class, BClass的静态代码块未执行

//        new AClass().refB1();//执行完这一行还是583个Class, BClass的静态代码块执行
        new AClass().refB2();//执行完这一行还是583个Class, BClass的静态代码块未执行, 这俩的区别在于是否初始化
        //可以看出, 直到要使用了才去loadB
    }

    //有这个方法, 则在上述sout第一行之前就已经resolve过AClass了
    //没有这个方法, 则在上述第二行才开始load和resolveAClass
    //初始化都要等.sm那行
    //load&resolve A必然会resolve它的父类 (在loadA的defineA方法里)
//    public AClass refA() {
//        return null;
//    }


}
